// 如果要差异值大于相似值, 需要让长度相同的元素不能组合
// 所以也就是长度不同的进行组合
// 所以需要先统计不同长度,对应的数量, 然后让这些长度之间进行自由组合
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let n;
let initArr = [];
rl.on("line", (line)=>{
    if(n === undefined){
        n = Number(line.trim())
    } else {
        initArr = line.trim().split(" ").map(Number)
        console.log(getResult(n, initArr))
        // clear
        n = undefined
        initArr.length = 0
    }

})

function getResult(n, initArr) {
    let obj = {}
    for (const num of initArr) {
        let length = num.toString(2).length
        obj[length] ? obj[length]++ : obj[length] = 1
    }
    let values = Object.values(obj)
    let ans = 0
    for (let i = 0; i < values.length - 1 ; i++) {
        for (let j = i + 1; j < values.length ; j++) {
            ans+= values[i] * values[j]
        }
    }
    return ans
}